package com.company.bean;

import com.opencsv.bean.CsvBindByName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
 * @author
 * @Date: 2021/1/23 14:41
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CheckField {

    /**
     * 录音名称
     */
    @NotNull
    @CsvBindByName(column = "录音名称")
    private String rName;

    /**
     * 持卡人代号
     */
    @Pattern(regexp = "\\s*[\\s\\p{Zs}]*[0-9]*", message = "持卡人代号必须为19位数字")
    @Size(max = 19, message = "持卡人代号不可超过19位")
    @CsvBindByName(column = "持卡人代号")
    @Valid
    private String ORG;

    /**
     * 录音路径
     */
    @CsvBindByName(column = "录音路径")
    private String rPath;

    /**
     * 被叫电话号码
     */
//    @NotBlank(message = "被叫电话号码不能为空")
    @CsvBindByName(column = "被叫电话号码")
    private String telNum;

    /**
     * 主叫号码
     */
//    @NotBlank(message = "主叫号码不能为空")
    @CsvBindByName(column = "主叫号码")
    private String callNum;

    /**
     * 呼叫时间
     */
    @CsvBindByName(column = "呼叫时间")
    private String rTime;

    /**
     * 呼叫结束时间
     */
//    @NotBlank(message = "呼叫结束时间不能为空")
    @CsvBindByName(column = "呼叫结束时间")
    private String rEndTime;

    /**
     * 通话类型
     */
    @CsvBindByName(column = "通话类型")
    private String callType;

    /**
     * 坐席姓名
     */
    @NotBlank(message = "坐席姓名不能为空")
    @CsvBindByName(column = "坐席姓名")
    private String userName;

    /**
     * 坐席工号
     */
    @NotBlank(message = "坐席工号不能为空")
    @CsvBindByName(column = "坐席工号")
    private String userNo;

    /**
     * 外包序列号
     */
    @Pattern(regexp = "^\\s*[\\s\\p{Zs}]*\\d{4}-\\d{3}-\\d{4}-\\d-\\d{8}$|" +
            "^\\s*[\\s\\p{Zs}]*\\d{4}-\\d{3}-\\d{4}-\\d{4}$|"+
            "^\\s*[\\s\\p{Zs}]*\\d{4}-\\d{3}-\\d{4}-\\d{5}$|"+
            "^\\s*[\\s\\p{Zs}]*\\d{4}-\\d{3}-\\d{4}-\\d{6}$",
            message = "外包序列号不满足格式")
    @CsvBindByName(column = "外包序列号")
    private String accountYType;

    /**
     * 机构ID
     */
    @Pattern(regexp = "[0-9]*", message = "机构ID必须为3到5位数字")
    @Size(min = 3, max = 5, message = "机构ID必须介于3到5位之间")
    @CsvBindByName(column = "机构ID")
    private String compId;

    /**
     * 催收方式
     */
    @Pattern(regexp = "\\s*[\\s\\p{Zs}]*\\u7535\\u8bdd\\u50ac\\u6536\\s*[\\s\\p{Zs}]*|\\s*[\\s\\p{Zs}]*\\u5916\\u8bbf\\s*[\\s\\p{Zs}]*",
            message = "催收方式格式不正确:\"电话催收or外访\"")
    @CsvBindByName(column = "催收方式")
    @NotBlank
    private String type;

    /**
     * 联系对象姓名
     */
    @NotBlank(message = "联系对象姓名不能为空")
    @CsvBindByName(column = "联系对象姓名")
    private String contactName;

    /**
     * 联系对象与持卡人关系
     */
    @NotBlank(message = "联系对象与持卡人关系不能为空")
    @CsvBindByName(column = "联系对象与持卡人关系")
    private String contactRelationship;

    /**
     * 是否可联
     */
    @Pattern(regexp = "\\s*[\\s\\p{Zs}]*\\u662f\\s*[\\s\\p{Zs}]*|\\s*[\\s\\p{Zs}]*\\u5426\\s*[\\s\\p{Zs}]*", message = "是否可联格式不正确:\"是、否\"")
    @CsvBindByName(column = "是否可联")
    private String isContact;

    /**
     * 外访地址
     */
    @CsvBindByName(column = "外访地址")
    private String address;

    /**
     * 号码来源
     */
//    @NotBlank(message = "号码来源不能为空")
    @CsvBindByName(column = "号码来源")
    private String source;

    /**
     * 通话情况
     */
//    @Pattern(regexp = "\\s*[\\s\\p{Zs}]*1\\s*[\\s\\p{Zs}]*|\\s*[\\s\\p{Zs}]*2\\s*[\\s\\p{Zs}]*", message = "通话情况格式不正确:1 or 2")
    @CsvBindByName(column = "通话情况")
    private String callInfo;

    /**
     * 催收小结
     */
    @NotBlank(message = "催收小结不能为空")
    @CsvBindByName(column = "催收小结")
    private String remark;
}
